// 1. 下载vuex: 终端命令(yarn add vuex -D and -S)
// 2. 引入vuex
import Vue from 'vue'
import Vuex from 'vuex'

// 3. 注册
Vue.use(Vuex)

// 4. 实例化store对象
const store = new Vuex.Store({
    // 定义state 共享的数据源
    state: {
        num: 99
    },
    // 唯一修改同步state的操作者
    mutations: {
        addNum(state, val) { // 负责增加库存的管家
            state.num += val
        },
        subNum(state, val) { // 负责减少库存的管家
            state.num -= val
        },
        setNum(state, val) { // 负责直接修改库存的管家
            state.num = val
        }
    },
    // actions - 异步修改state，但是 最终还是需要 commit 到  mutations中 本质也是函数
    actions: {
        asyncAddNum(store, val = 1) {
            setTimeout(() => {
                store.commit('addNum', val)
            }, 2000)
        },
        asyncSubNum(store, val = 1) {
            setTimeout(() => {
                store.commit('subNum', val)
            }, 2000)
        }
    }
})

// 5. 导出store
export default store